iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 4
1

零、在GCP上還要建立VM嗎?

這是我一直在思考的問題,GCP上自帶Datalab、Jupyter notebook,還有海量的API可以使用,那麼為什麼我會先選擇使用虛擬機來嘗試我的第一步呢? 在討論之前先來談談目標吧!

我們其實只是需要一台運算效能高的電腦

接觸GCP幾天下來,我認為GCP厲害的地方在於可以非常有效地整合運算流。整個系統架構非常地漂亮且舒服 「我把所有的data放在一邊,另一邊的電腦們想要什麼自己去取」。

然而或許是因為剛接觸的關係,我認為在GCP上使用Datalab訪問API還不是很習慣且不方便,對於剛入門的我或許使用VM會更快上手,我現在並不確定VM節點是否能夠訪問API(應該是可以啦~),至少對我而言,直接控制一台電腦會更加地快速且方便。

  • 而且我已經申請了300美金的試用額度,當然要來個虛擬環境享受一下呀! (這才是主因吧喂!

那麼我們話不多說,開始建立第一個Virtual Machine

一、建立Virtual Machine

在建立VM之前,我們必須先申請一下GPU配額
畢竟...接下來你所看到的GPU可不是什麼1080或是2080這種等級的存在。

  • 以下的操作皆在GCP裡面喔~!

1. 申請GPU配額

  • 路徑 : 導覽選單->IAM與管理員->配額
  • 指標(查找方便)勾選GPU可以看到Computer Engine API,勾選並編輯配額
    • 將配額設為1,打上隨便的理由(? 申請吧!

申請完成必須等待mail通知,審核時間1小時-3天不等,通過後再進行下面步驟

2. 建立第一台虛擬機(VM)

  • 路徑 : 導覽選單->Computer Engine->VM執行個體->建立執行個體
  • 我創建了一個一般用途的機器
    • 4個vCPU+15GB
    • 1個NVIDIA Tesla K80
    • 系統為Debian GNU/Linux 9(stretch) -> 預設
      • 不選Ubuntu因為我比較喜歡Deian
  • 我們來看看價格吧!
    • 超級啊!!! 他單位是美金阿草

如果遇上建立失敗Quota 'GPUS_ALL_REGIONS' exceeded. Limit: 0.0 globally代表申請還沒通過,繼續等吧!

建立完成 ! 讓我們Start吧 !

二、架上python環境-Anaconda

    1. 啟動我們的VM,並用網頁SSH開啟它
    1. 下載Anaconda - Linux
    • $wget http://repo.continuum.io/archive/Anaconda3-2019.07-Linux-x86_64.sh
    1. 安裝它
    • $bash Anaconda3-4.0.0-Linux-x86_64.sh
    • 看到yes/no問題請達yes
    1. 更新shell環境
    • $source ~/.bashrc
    1. 母環境配置
    • $conda install nb_conda
    • $jupyter notebook --generate-config
    1. 建構tensorflow虛擬環境吧!
    • $conda create -n tensorflow python=3.6 ipykernel conda
    • $conda activate tensorflow
    • $conda install numpy matplotlib tensorflow-gpu
    • $conda deactivate
    1. 建立jupyter notebook訪問密碼
    • $python
    • $from notebook.auth import passwd
    • $passwd()
      • 打上你的密碼兩次,會吐回給你一組編碼,先把它複製起來,等等會用到

三、配置

1. GCP上防火牆port

  • 路徑 : 導覽選單->VPC網路->防火牆規則
  • 點選建立防火牆規則(使用如下圖的配置)
    • 目標 : 所有執行體
    • 來源IP範圍 : 0.0.0.0/0
    • 指定通訊協定 : 設定TCP port(8888)

2. jupyter notebook設定檔

這步驟同配置Anaconda,在你的SSH上執行
而我是在MobaXterm上做的,如果有人感興趣可以在下方留言,我把SOP放在那邊吧!

  • 打開~/.jupyter/jupyter_notebook_config.py檔案修改裡面內容
    • c.NotebookApp.ip = '*'
    • c.NotebookApp.password = u'<步驟7的那串密碼>'
    • c.NotebookApp.open_browser = False

四、連上Jupyter開始第一個GPU-base的coding啦!

興奮的時刻總是來得特別晚

  • 打開網頁輸入<外部IP>:8888
    • 外部IP可以在Computer Engine->VM執行個體看到
  • 然後打上密碼
  • 進去啦!

>讓我們開始真真正正地訓練第一個NN Model

進入jupyer notebook後,右邊的new點一下可以看到我們的虛擬環境tensorflow
請... 毫不猶豫地 點下去

第一個當然是MNIST啊!

接下來請copy-paste

  • import需要的庫
import tensorflow.keras as keras
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Flatten
from tensorflow.keras.layers import Conv2D, MaxPooling2D
from tensorflow.keras import backend as K
  • 取得MNIST Dataset和預處理
batch_size = 128
num_classes = 10
epochs = 12

# input image dimensions
img_rows, img_cols = 28, 28

# the data, split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()

if K.image_data_format() == 'channels_first':
    x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
    x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
    input_shape = (1, img_rows, img_cols)
else:
    x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
    x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
    input_shape = (img_rows, img_cols, 1)

x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')

# convert class vectors to binary class matrices
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)
  • 建立CNN model並訓練
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
                 activation='relu',
                 input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

model.compile(loss=keras.losses.categorical_crossentropy,
              optimizer=keras.optimizers.Adadelta(),
              metrics=['accuracy'])

model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=epochs,
          verbose=1,
          validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

靜待結果吧!

等等,這不是用GPU吧? 不管了,今天就先這樣

結語

今天建立了我的第一個VM,定且在VM上成功布置了Anaconda Jupyter Notebook
而且!!可以直接連上作業啦! (耶~! (灑花~!
然後第一個程式從CNN開始,下一個章節打算簡單介紹NN的分類和優化器、LOSS...等基礎的ML知識

參考


上一篇
GCP環境建置-我可以開始Coding啦!
下一篇
股票預測需要什麼樣的NN模型?
系列文
AI可以分析股票嗎?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
jasonwu513
iT邦新手 5 級 ‧ 2019-09-28 05:56:27

Hi 大大: 那個計價的部分我印象中是美金不是台幣喔??

感謝指點Orz... 我用到一半想說怎麼才用個4、5天就要800多台幣,原來如此原來如此 哈哈哈哈

我後來都用自己電腦好了其實 (掩面

我要留言

立即登入留言